#include <stdio.h>
#include <stdint.h>
#include "menu2.h"
#define iomem_free free
#define iomem_malloc malloc
struct {
menu_t *now;//当前链表位置
uint8_t ctrl;
char input;
}menu_info;


menu_t * delete_page(menu_t * head,uint8_t num)//删除head菜单id为num下的所以自己
{
    menu_t *p=NULL,*pr,*first;
    for(uint8_t i=0;i!=num;i++)
    {
        if(head==NULL)
        {
            printf("不存在此功能号,删除页失败");
            return 0;
        }
        head=head->same_next;
    }
    if(head->next!=NULL)
    {
         p=head->next;
    }
    if(num==0)//删除第一项的子项
    {
        head->same_next->same_last=NULL;
        head->last->next=head->same_next;
        first=head->same_next;
        pr=head->same_next;
         iomem_free(head);
                while(pr!=NULL)//id改变
            {
                pr->id=pr->id-1;
                pr=pr->same_next;
           }
    }else if(head->same_next==NULL)//删除最后一项的子项
    {
        head->same_last->same_next=NULL;
           iomem_free(head);
    }
    else//中间项
    {
        head->same_last->same_next=head->same_next;
        head->same_next->same_last=head->same_last;
        pr=head->same_next;
         iomem_free(head);
                while(pr!=NULL)//id改变
            {
                pr->id=pr->id-1;
                pr=pr->same_next;
           }
      
    }
    if(p!=NULL)
    {
            while(p!=NULL)//释放子项
    {
        head=p;
        p=p->same_next;
        iomem_free(head);
    }
    }
    if(num==0)
    return first;
    else
    {
        return 0;
    }
    
    
}

menu_t*add_funsion(menu_t *head,void * fun,char * str){    //添加一个功能 head为该界面的第一项，自动在该界面后添加一项功能
	menu_t *p = NULL,*pr = head;   
    
	p = (menu_t *)iomem_malloc(sizeof(menu_t)) ; 
	if(p == NULL){		
		printf("NO enough momery to allocate!\n");
	}
	if(head == NULL){		
		head = p;	//head为空，创建头节点	
        printf("creat head\n");						
	}else{				//如果不是创建头节点	
        uint8_t i=1;					                       
		while(pr->same_next!= NULL){		//找到同级菜单最后的表
        {
            i++;
            pr = pr->same_next;
        }
			
		}
		pr->same_next = p;	//在同级菜单尾部创建一个功能
        p->same_last=pr;
        p->last=head->last;
        p->floor=head->floor;
       
        p->id=i;
	}
     p->funsion=fun;
	 p->menu_name=str;
	p->same_next = NULL;//下一个同级功能为空
    p->next=NULL;			//下一个子集功能为空
    p->floor=0;
	return head;		
}
menu_t * set_page(menu_t * head,uint8_t num)//输入为页的表头
{
    if(num)
    {
        for(uint8_t i=0;i<num;i++)
    {
        if(head->same_next!=NULL)
        head=head->same_next;
        else
        {
            printf("超出当前功能号\n");
        }
        
    }
    }
    
     if(head->next!=NULL)
    head=head->next;
    else
    {

    menu_t *p = NULL;   
	p = (menu_t *)iomem_malloc(sizeof(menu_t)) ; 
	if(p == NULL){		
		printf("NO enough momery to allocate!\n");
	}
								                       
		head->next=p;
        p->last=head;
        p->id=0;//当前功能号为0
        p->floor=head->floor+1;
        p->same_last=NULL;
        p->same_next=NULL;
        p->next=NULL;
        return p;
    }
    
    return head;
}
// void fun1()
// {
//    printf("%s","\033[1H\033[2J");//linux下的清屏函数,window下请用system("cls");
//     printf("使用键盘选择以下功能\n");
//     if(sys_info.now->last!=NULL)//如果父极不为空
//     {
//         menu_t * start=sys_info.now->last->next;//start指向同级第一个
//         while(start!=NULL)//将所有功能打在屏幕上,如果功能和选中功能一样,变色
//         {
            
//             if(start->menu_name==sys_info.now->menu_name)//
//             {
//                 printf("********%d%s*********\n",start->id,start->menu_name);
//             }
//             else
//             {
//                 printf("    ****%d%s****\n",start->id,start->menu_name);
//             }
//             start=start->same_next;

//         }
//     }
//     else
//     {
//         printf("父极为空");
//     }


// }

void set_fun(menu_t *menu,void * fun,char * str)//设置函数和功能
{
        menu->funsion=fun;
        menu->menu_name=str;
}

// void main()
// {
//     sys_info.ctrl=1;

//     menu_t *head=NULL;
//     head=add_funsion(head,kong,"添加头节点");//添加头节点

//      menu_t *first=set_page(head,0);//主页面
//     set_fun(first,fun1,"第一页选项一");
//    add_funsion(first,fun1,"第一页选项二");
//     add_funsion(first,fun1,"第一页选项三");
//     add_funsion(first,fun1,"第一页选项四");

//     menu_t *second=set_page(first,0);//第一个功能的页面 二级菜单
//     set_fun(second,fun1,"选项一的选项一");
//     add_funsion(second,fun1,"选项一的选项二");
//     add_funsion(second,fun1,"选项一的选项三");
//     add_funsion(second,fun1,"选项一的选项四");
    

//     menu_t *three=set_page(first,1);//第一个功能的页面 二级菜单
//     set_fun(three,fun1,"选项二的选项一");
//     add_funsion(three,fun1,"选项二的选项二");
//     add_funsion(three,fun1,"选项二的选项三");

//     menu_t *four=set_page(second,0);//第一个功能的页面的第一个页面  三级菜单
//     set_fun(four,fun1,"选项一的选项一的选项一");
//     add_funsion(four,fun1,"选项一的选项一选项二");
//     add_funsion(four,fun1,"选项一的选项一选项三");

//     first=delete_page(first,0);
//     sys_info.now=first;
//     fun1();
//     while(1)
//     {
//         switch_input();
//     }

// }
